package mkt.classes.DAO;


import java.util.List;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import mkt.classes.bean.Livro;


/**
 *
 * @author Claudio Leite
 */
public class LivroDAO {

    private Connection conexao;

    public LivroDAO(Connection conexao) {
        this.conexao = conexao;
    }

    public void create(Livro liv) throws SQLException {
        if (this.valida(liv)) {
            String sql = "INSERT INTO LIVRO (COD,TITULO) VALUES (NEXTVAL('SEQLIVRO'),?,?)";

            PreparedStatement pst = this.conexao.prepareStatement(sql);
            pst.setString(1, liv.titulo);
            pst.executeUpdate();
            Statement st = this.conexao.createStatement();
            ResultSet rs = st.executeQuery("SELECT CURRVAL ('SEQLIVRO')");

            if (rs.next()) {
                liv.setCod(rs.getInt(1));
            }
            rs.close();
            st.close();
            pst.close();
        }
    }

    public Livro retrieve(Livro liv) throws SQLException {
        Livro livRet = null;
        String sql = "SELECT COD,TITULO FROM LIVRO WHERE COD=?";
        PreparedStatement pst = this.conexao.prepareStatement(sql);
        pst.setInt(1, liv.getCod());
        ResultSet rs = pst.executeQuery();
        if (rs.next()) {
            livRet = new Livro();
            livRet.setCod(rs.getInt("COD"));
            livRet.setTitulo(rs.getString("TITULO"));
        }
        rs.close();
        pst.close();
        return livRet;
    }

    public void update(Livro liv) throws SQLException {
        if (this.valida(liv)) {
            String sql = "UPDATE LIVRO SET TITULO=? WHERE COD=?";
            PreparedStatement pst = this.conexao.prepareStatement(sql);
            pst.setString(1, liv.getTitulo());
            pst.setInt(2, liv.getCod());
            pst.executeUpdate();
            pst.close();
        }
    }

    public void delete(Livro liv) throws SQLException {
        String sql = "DELETE FROM LIVRO WHERE COD=?";
        PreparedStatement pst = this.conexao.prepareStatement(sql);
        pst.setInt(1, liv.getCod());
        pst.executeUpdate();
        pst.close();
    }

    public List<Livro> listaTodos() throws SQLException {
        List<Livro> lista = new ArrayList<Livro>();
        String sql = "SELECT COD,TITULO FROM LIVRO ORDER BY COD";
        Statement st = this.conexao.createStatement();
        ResultSet rs = st.executeQuery(sql);
        while (rs.next()) {
            Livro liv = new Livro(rs.getInt("COD"), rs.getString("TITULO"));
            lista.add(liv);
        }
        rs.close();
        st.close();
        return lista;
    }

    public boolean valida(Livro liv) {
        boolean ret = false;
        if (liv != null) {
            ret = true;
        }
        return ret;
    }
}
